访问电脑版页面

导航:老古开发网手机版51单片机与I2C总线

24C512程序

导读:
关键字:

#include <REG52.H>
#include <stdio.h>

sbit escl=P0^3;      
sbit esda=P0^2;
void w24c512(uchar pageadr,uchar wdataadr,uchar wdata);//一个字节写入24C512子程序,入口:uchar pageadr,uchar wdataadr,uchar wdata
uchar r24c512(uchar pageadr,uchar wdataadr);//从24C512中读取一个字节,入口uchar pageadr,uchar wdataadr,有返回值
void delay_10us(void);

 //==================//写24C512子程序单字节//==================
//============//入口:uchar pageadr,uchar wdataadr,uchar wdata========
void w24c512(usigned char device,unsigned int wdataadr,uchar wdata)
{
uchar i,msb,lsb;
uchar deviceadr;
escl=0;
delay_10us();
esda=1;
delay_10us();
escl=1;
delay_10us();
esda=0;
delay_10us();
escl=0;
//开始时序

if (device==0)
{
deviceadr=0xa0;
}
else
{
deviceadr=0xa2;
}
order=deviceadr;
for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//page adr sequ
 msb=wdataadr/256;
 lsb=wdataadr % 256; 
 order=msb;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
//msb高字节

 order=lsb;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
//lsb低字节

 order=wdata;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//want to write a byte

esda=0;
delay_10us();
escl=1;
delay_10us();
esda=1;
delay_10us();
escl=0;
delay_10us();
delay_10us();
delay_10us();
}
//stop

 


//==================//读24C512子程序单字节//==================
//==================//入口:uchar pageadr,uchar wdataadr,有返回值======
uchar r24c16(usigned char device,unsigned int wdataadr,uchar wdata){
uchar i,msb,lsb,deviceadr;


escl=0;
delay_10us();
esda=1;
delay_10us();
escl=1;
delay_10us();
esda=0;
delay_10us();
escl=0;
//start sequ

if (device==0)
{
deviceadr=0xa0;
}
else
{
deviceadr=0xa2;
}
order=deviceadr;
for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//page adr sequ
 
 msb=wdataadr/256;
 lsb=wdataadr % 256; 
 order=msb;

    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//unit adr sequ


 order=lsb;
    for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//unit adr sequ

 


 

 escl=0;
 delay_10us();
 esda=1;
 delay_10us();
 escl=1;
 delay_10us();
 esda=0;
 delay_10us();
 escl=0;
//restart

if (device==0)
{
deviceadr=0xa1;
}
else
{
deviceadr=0xa3;
}
 order=deviceadr;
 for(i=0;i<8;i++)
 {
 esda=order7;
 delay_10us();
 escl=1;
 delay_10us();
 escl=0;
 delay_10us();
 order=order<<1;
 }
 delay_10us();
 escl=1;
 delay_10us();
 escl=0; 
//page adr sequ

 order=0x00;
 esda=1;

 for(i=0;i<8;i++)
 {
 order=order<<1; 
 escl=1;
 delay_10us();
 order0=esda;
 delay_10us();
 escl=0;
 delay_10us();
  }
 //read data
  esda=1;
 escl=1;
 delay_10us();
 escl=0;
 //ack

esda=0;
delay_10us();
escl=1;
delay_10us();
esda=1;
delay_10us();
escl=0;
delay_10us();
delay_10us();
delay_10us();
wdataadr=order;
return(wdataadr);
}
//stop

void delay_10us(void)
{
 unsigned int  i;
 for(i=0;i<600;i++)
 {
 
 }
}


来源:   作者:  2006/9/25 16:50:53
栏目: [ 51单片机与I2C总线]

相关阅读

8051单片机的I2C接口并行扩展

51单片机模拟I2C总线的C语言实现

24C512程序

基于51单片机i2c多字节的读写

大神教你快速上手:标准80C51单片机模拟I2C总线的主机程序

80C51单片机模拟I2C总线的主机程序分享

如何采用C51单片机读写CAT24C32

51单片机——I2C总线

51单片机对SAA7113初始化和控制的程序

51单片机连接24C02-C语言测试代码

如何采用51单片机连接24C02-C语言测试代码

如何用51单片机实现IIC通信

51单片机模拟I2C总线程序